创建物体的两个必要条件
- 几何形状(Geometry)
- 材质(Material)
几何形状
作用
储存一个物体的顶点信息。
基本几何形状
立方体(CubeGeometry)
1 2 3 4 5 6 7 8 9 10
| new THREE.CubeGeometry( width, height, depth, widthSegments, heightSegments, depthSegments );
|
平面(PlaneGeometry)
并不是数学上无限大小的平面。
1 2 3 4 5 6 7 8
| new THREE.PlaneGeometry( width, height, widthSegments, heightSegments );
|
球体(SphereGeometry)
1 2 3 4 5 6 7 8 9
| new THREE.SphereGeometry( radius, segmentsWidth, segmentsHeight, phiStart, phiLegth, thetaStart, thetaLength );
|
圆形(CircleGeometry)
1 2 3 4 5 6
| new THREE.CircleGeometry( radius, segments, thetaStart, thetaLength );
|
圆柱体(CylinderGeometry)
正圆柱
圆台
1 2 3 4 5 6 7
| new THREE.CylinderGeometry( radiusTop, radiusBottom, height, radiusSegments, heightSegments );
|
正n面体
- 正四面体(TetrahedronGeometry)
- 正八面体(OctahedronGeometry)
- 正十二面体(IcosahedronGeometry)
1 2 3 4
| new Three.xxxGeometry( radius, detail );
|
圆环面(TorusGeometry)
它的形状类似于甜甜圈。
1 2 3 4 5 6 7
| new THREE.TorusGeometry( radius, tube, radialSegments, tubularSegments, arc );
|
圆环结(TorusKnotGeometry)
它的形状类似于打了结的甜甜圈。
1 2 3 4 5 6 7 8 9
| THREE.TorusKnotGeometry( radius, tube, radialSegments, tubularSegments, p, q, heightScale )
|
自定义形状
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
var geometry = new THREE.Geometry();
geometry.vertices.push(new Victor3(-1, 2, -1)); geometry.vertices.push(new Victor3(1, 2, -1)); geometry.vertices.push(new Victor3(1, 2, 1)); geometry.vertices.push(new Victor3(-1, 2, 1));
geometry.vertices.push(new Victor3(-2, 0, 2)); geometry.vertices.push(new Victor3(2, 0, -2)); geometry.vertices.push(new Victor3(2, 0, 2)); geometry.vertices.push(new Victor3(-2, 0, 2));
geometry.faces.push(new THREE.Face(0, 1, 2, 3));
geometry.faces.push(new THREE.Face(4, 5, 6, 7));
geometry.faces.push(new THREE.Face(0, 1, 5, 4)); geometry.faces.push(new THREE.Face(1, 2, 6, 5)); geometry.faces.push(new THREE.Face(2, 3, 7, 6)); geometry.faces.push(new THREE.Face(3, 0, 4, 7));
|
材质
定义
材质是独立于物体顶点信息之外的与渲染效果相关的属性。
通过修改它,可以改变物体的颜色、纹理贴图、光照模式等。
种类
基本材质(MeshBasicMaterial)
使用基本材质的物体,渲染后不会由于光照产生明暗、阴影效果。
1 2 3 4 5 6 7 8 9 10 11 12
| new THREE.MeshBasicMaterial(opt);
|
Lambert材质(MeshLambertMaterial)
- 符合Lambert光照模型的材质。
- 只考虑漫反射而不考虑镜面反射。
1 2 3 4 5 6 7 8 9
| new THREE.MeshLambertMaterial(opt);
|
其光照模型(了解即可):
1 2 3 4 5 6
| > Idiffuse = Kd * Id * cos(theta) > Idiffuse:漫反射光强。 > Kd:物体表面的漫反射属性。 > Id:光强。 > theta:光的入射角弧度。 >
|
Phong材质(MeshPhongMaterial)
- 既考虑漫反射又考虑镜面反射。
- 其漫反射模型与Lambert相同。
1 2 3 4 5 6 7 8 9
| new THREE.MeshPhongMaterial(opt);
|
Phong材质镜面反射光照模型(漫反射模型与Lambert相同):
1 2 3 4 5 6 7
| > Ispecular = Ks * Is * (cos(alpha))^n > Ispecular:镜面反射光强 > Ks:材质表面镜面反射系数 > Is:光源强度 > alpha:反射光与视线的夹角 > n:高光系数,值越大则高光系数越小 >
|
法向材质
1
| new THREE.MeshNormalMaterial();
|
材质的纹理贴图
注意:贴图只有运行在服务器上才能显示出来。
1 2 3 4 5 6 7
| var texture = THREE.ImageUtils.loadTexture('../img/0.png');
var material = new THREE.MeshLambertMaterial({ map:texture });
|
有哪些物体?
- 最常见:网格(Mesh)
- 其他:线段(Line)、骨骼(Bone)、粒子系统(ParticleSystem)
如何创建物体?
创建物体时,需要指定几何形状和材质。
1 2
| ] new THREE.Mesh(geometry, material);
|